perm filename DITHER.CH[UHF,DEK] blob sn#841749 filedate 1987-06-18 generic text, type T, neo UTF8
% Change file for DDTONE.WEB, changes to yield the ordered dither method
@x
	begin i←class_row[k]; j←class_col[k];
	while j≤nn do
		begin @<Decide the color of pixel |[i,j]| and the resulting |err|@>;
		for l←start[k] to start[k+1]-1 do
			begin u←i+del_i[l]; v←j+del_j[l];
			buffer[u,v]←buffer[u,v]+err*alpha[l];
			end;
@y
	begin i←class_row[k]-3; j←class_col[k];
	while j≤nn do
		begin @<Decide the color of pixel |[i,j]| and the resulting |err|@>;
@z
@x
err←buffer[i,j]; err_black←err-1.0;
if err_black+err>0 then
	begin err←err_black; darkness[i,j]←black;
	end
@y
if buffer[i,j]≥(k+0.5)/64.0 then darkness[i,j]←black
@z
@x
begin store(i,j); store(i-4,j+4); store(5-j,i); store(1-j,i-4);@/
store(4+j,1-i); store(j,5-i); store(5-i,5-j); store(1-i,1-j);
end;

@ @<Initialize the class number matrix@>=
k←0; store_eight(7,2); store_eight(8,3); store_eight(8,2); store_eight(8,1);@/
store_eight(1,4); store_eight(1,3); store_eight(1,2); store_eight(2,3);@/
@y
begin store(i,j); store(i+4,j+4); store(i,j+4); store(i+4,j);@/
store(i+2,j+2); store(i+6,j+6); store(i+2,j+6); store(i+6,j+2);
end;
procedure stero_eight(@!i,@!j:integer); {dual of the other}
begin store(i,j); store(i+4,j+4); store(i,j+4); store(i+4,j);@/
store(i+2,j+6); store(i+6,j+2); store(i+2,j+2); store(i+6,j+6);
end;

@ @<Initialize the class number matrix@>=
k←0; store_eight(1,1); stero_eight(1,3); store_eight(2,2); stero_eight(2,4);@/
store_eight(1,2); stero_eight(1,4); store_eight(2,1); stero_eight(2,3);@/
@z
@x
if hold[i,j] then class_row[k]←i-8;
@y
@z